package cn.powertime.evaluation.service;

import cn.powertime.evaluation.entity.CpsTestPaper;
import cn.powertime.evaluation.vo.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 试卷表 服务类
 * </p>
 *
 * @author Yang Xin
 * @since 2019-09-25
 */
public interface CpsTestPaperService extends IService<CpsTestPaper> {

    /**
     * 课后作业/课程刷题试卷列表
     *
     * @param page 分页参数
     * @param vo   请求参数vo
     * @return RespTestPaperVo 试卷vo
     */
    Page<RespTestPaperPageVo> courseWorkTestPaperList(Page page, ReqCourseTestPaperSearchVo vo);

    /**
     * 通过小节id查询试卷详情
     *
     * @param sectionId 小节id
     * @return CpsTestPaper 试卷实体
     */
    CpsTestPaper selectTestPaperBySectionId(Long sectionId);

    /**
     * 通过课程id查询试卷详情
     *
     * @param courseId 课程id
     * @return CpsTestPaper 试卷实体
     */
    CpsTestPaper selectTestPaperByCourseId(Long courseId);

    /**
     * 通过试卷id查询习题列表
     *
     * @param userId      用户id
     * @param testPaperId 试卷id
     * @return List 习题集合
     */
    List<RespTopicListVo> selectTopicListByTestPaperId(Long userId, Long testPaperId);

    /**
     * 真题模拟试卷列表
     *
     * @return Page
     */
    Page<RespTestPaperPageVo> simulateExaminationPaperList(Page<CpsTestPaper> page);

    /**
     * 通过试卷类型及归属测评练习ID查询试卷
     *
     * @param vo (type:试卷类型，practiceId:测评练习题库id)
     * @return Page
     */
    Page<RespTestPaperPageVo> testing(Page<CpsTestPaper> page, ReqTestPaperSearchVo vo);

    /**
     * 已答试卷
     *
     * @param page   分页参数
     * @param vo     查询条件
     * @param userId 用户id
     * @return Page
     */
    Page<RespAnswerTestPaperVo> answerRecord(Page page, ReqAnswerTestPaperSearchVo vo, Long userId);

    /**
     * 查看试卷
     *
     * @param userId   用户id
     * @param resultId 考试结果id
     * @return List
     */
    List<RespAnswerTopicListVo> testPaperView(Long userId, Long testPaperId, Long resultId);

    List<RespTopicListVo> appSelectTopicListByTestPaperId(  Long testPaperId);

}
